package study.IO.字节流.InputStream;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class ZipInputStream_Demo {
    public static void main(String[] args) throws IOException {
        // 解压压缩包
        // 1.创建一个File表示要解压的压缩包
        File src = new File("Files\\a.zip");
        // 2.创建一个File表示解压的目的地
        File dest = new File("Files\\bbb");
        
        // 创建方法来解压缩
        unzip(src, dest);
    }
    
    public static void unzip(File src, File dest) throws IOException {
        // 解压：把压缩包里面的每个文件或者文件夹取出来，按照层级拷贝到目标路径
        // 创建一个解压流用来读取压缩包中的数据
        ZipInputStream zis = new ZipInputStream(new FileInputStream(src));
        // 要先获取到压缩包里面的每一个zipEntry对象。
        // getNextEntry会获取所有的文件和文件夹，获取不到内容会返回 null
        ZipEntry ze;
        while ((ze = zis.getNextEntry()) != null) {
            // 如果是文件夹：需要在目的地dest处创建一个同样的文件夹
            if(ze.isDirectory()) {
                File file = new File(dest, ze.toString());
                file.mkdirs();
            }else {
            // 如果是文件，那么需要读取到压缩包中的文件，并存放到dest文件对于的目录
                FileOutputStream fos = new FileOutputStream(
                        new File(dest, ze.toString()));
                int b;
                while((b = zis.read()) != -1){
                    fos.write(b);
                }
                fos.close();
                // 表示在压缩包中的一个文件处理完毕，关掉
                zis.closeEntry();
            }
        }
        
        zis.close();
    }
    
    
}
